import axios from 'axios'// 导入axios
import { useStore } from 'vuex'// 导入vuex仓库
import { useRouter } from 'vue-router'// 导入路由
const store = useStore()// 创建store对象
const router = useRouter()// 创建路由对象

// axios.create作用:创建返回一个新的axios函数对象
const instance = axios.create({
  // 配置基地址
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net/',
  // 延迟时间
  timeout: 5000
})

// 请求拦截器:统一添加请求头
instance.interceptors.request.use(config => {
  // 如果已经登录,发送请求携带token信息
  const token = store.state.user.profile.token
  // 判断是否有token
  if (token) {
    // 添加请求头
    config.headers.Aouthorization = 'Beraer ' + token
  }

  return config
}, err => {
  return Promise.reject(err)
})

// 响应拦截器:1.对吼端返回的数据进行处理(简化数据) 2.token失效处理
instance.interceptors.response.use(res => {
  // 去除掉axios里包装的data属性
  return res.data
}, err => {
  // 判断token是否失效
  if (err.response && err.response.status === '401') {
    // 清空store的token
    store.commit('user/updateUser', {})
    // 跳转到登录页
    return router.path('/login')
  }
  return Promise.reject(err)
})

// 二次封装axios函数
export default ({ url, method = 'GET', params, data, headers }) => {
  return instance({
    url: url,
    method: method,
    params: params,
    data: data,
    headers: headers
  })
}
